#ifndef __DMR_GPIO_H_
#define __DMR_GPIO_H_

#if defined(N32G430)
	#include "n32g430_gpio.h"
#endif

#define DMR_PIN_INIT_LEVEL_LOW		0
#define DMR_PIN_INIT_LEVEL_HIGE		1
#define DMR_PIN_INIT_LEVEL_DEFAULT	2

#define DMR_PIN_SET ((bool)0x1)
#define DMR_PIN_RESET ((bool)0x0)
	
#define DMR_ENABLE_EXIT ((bool)0x1)
#define DMR_DISABLE_EXIT ((bool)0x0)
	
typedef struct
{
#if defined(N32G430)
	/*
		GPIOA......GPIOD......
	*/
	GPIO_Module* gpiox;
	
	/*
		PA0.....PA15......
	*/
	uint16_t pin;
	
	/*
		工作模式
		GPIO_MODE_INPUT		输入模式
		GPIO_MODE_OUT_PP	推挽输出模式
		GPIO_MODE_OUT_OD	开漏输出模式
		GPIO_MODE_AF_PP		复用推挽输出模式
		GPIO_MODE_AF_OD		复用开漏输出模式
		GPIO_MODE_ANALOG	模拟模式
	*/
	uint32_t mode;
	
	/*
		
		GPIO_NO_PULL	//无上下拉
		GPIO_PULL_UP	//上拉
		GPIO_PULL_DOWN	//下拉
	*/
	uint32_t pull;
	
	/*
		速率
		GPIO_SLEW_RATE_FAST
		GPIO_SLEW_RATE_SLOW
	*/
	uint32_t speed;
	
	/*
		驱动电流
		GPIO_DS_2MA
		GPIO_DS_8MA
		GPIO_DS_4MA
		GPIO_DS_12MA
	*/
	uint32_t current;
	
	/*
	复用功能
	*/
	uint32_t alternate;
	
	/*
		初始电平
		
	*/
	uint32_t initLevel;
	
	
	uint32_t isExit;
	uint32_t priority;
	EXTI_TriggerType extiTriggerMode;
	
	
#endif
	
}dmr_gpioHandle;



void dmr_gpioInit(dmr_gpioHandle *handle);

void 	dmr_gpioWritePinLevel(GPIO_Module* gpiox,uint16_t pin,bool status);
#define dmr_gpioWriteLevel(handle,status) dmr_gpioWritePinLevel(handle.gpiox,handle.pin,status)
void 	dmr_gpioTogger(dmr_gpioHandle *handle);


bool 	dmr_gpioReadPinLevel(GPIO_Module* gpiox,uint16_t pin);
#define dmr_gpioReadLevel(handle)	dmr_gpioReadPinLevel(handle->gpiox,handle->pin)

#endif


